/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.jcp.modelo.dao;

import com.jcp.modelo.Usuario;
import com.jcp.modelo.dao.conexion.Conexion;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;


/**
 *
 * @author DARWIN SILVA VARGAS
 */
public class UsuarioDao implements Serializable {

     public static Usuario load(ResultSet rs) throws SQLException{
        Usuario u=new Usuario();
            u.setCodigo(rs.getString("codusuario"));
            u.setCedula(rs.getString("cedula"));
            u.setNombre(rs.getString("nombre"));
            u.setCargo(rs.getString("cargo"));
            u.setClave(rs.getString("clave"));
            u.setEmail(rs.getString("email"));
        return u;
    }
      
       private static Conexion conexion;
       private static UsuarioDao usuariodao;

       private UsuarioDao() throws SQLException {
        conexion = Conexion.getInstance();
    }

    public static UsuarioDao getInstance() throws SQLException {
        if (usuariodao == null) {
            usuariodao = new UsuarioDao();
        }

        return usuariodao;
    }


        public static void agregarUsuario (Usuario u) throws SQLException, Exception{
        PreparedStatement pst= conexion.getCon().prepareStatement("Insert Into usuario values(?,?,?,?,?,?)");
          pst.setString(1,u.getCodigo());
          pst.setString(2,u.getCedula());
          pst.setString(3,u.getNombre());
          pst.setString(4,u.getCargo());
          pst.setString(5,u.getClave());
          pst.setString(6,u.getEmail());

          pst.executeUpdate();
    }

public static Usuario BuscarUsuario(String cod) throws SQLException{
         if (cod == null) {
          throw new SQLException("No hay elemento clave de la clase usuario");
        }
         ResultSet rs = null;
         Usuario usu = null;
         PreparedStatement pst= conexion.getCon().prepareStatement("select * from usuario where codusuario = ?");
         pst.setString(1, cod.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
             usu = load(rs);
         }

          return usu;

    }



    public boolean login(String user, String password) throws SQLException {
        PreparedStatement ps = conexion.getCon().prepareStatement("SELECT * FROM usuario u WHERE u.nombre = ? AND u.clave = ?");
        ps.setString(1, user);
        ps.setString(2, password);

        ResultSet rs = ps.executeQuery();
        Usuario p = null;
        if (rs.next()) {
            p = load(rs);
        }


        return (p != null);
    }


/*public boolean iniciarSesion (String nom, String cla) throws SQLException{
    
            PreparedStatement pst = conexion.getCon().prepareStatement("select * from usuario where nombre = ? and clave=?");
            pst.setString(1, nom.trim());
            pst.setString(2, cla.trim());

            ResultSet rs = pst.executeQuery();
            Usuario us = null;

            while (rs.next()) {
                us = load(rs);
            }
        return (us != null);
}*/

public static boolean ModificarUsuario(Usuario u,String cod) throws SQLException, Exception{
      if ( BuscarUsuario(cod) == null) {
          throw new SQLException ("Usuario no registrado ");
      }
      boolean res=false;
       PreparedStatement pst = conexion.getCon().prepareStatement("Update usuario set codusuario = ?, cedula = ?, nombre = ?, cargo = ?, clave = ?,  email = ? where codusuario= ?" );
            pst.setString(1,u.getCodigo());
            pst.setString(2,u.getCedula());
            pst.setString(3,u.getNombre());
            pst.setString(4,u.getCargo());
            pst.setString(5,u.getClave());
            pst.setString(6,u.getEmail());
            pst.setString(7,cod);


     int r= pst.executeUpdate();

     if (r != 0) {
      res = true;
    }

     return res;
}

 public static void EliminarUsuario(String cod) throws SQLException, Exception{
         if (BuscarUsuario(cod) == null) {
        throw new SQLException("No hay elemento clave de la clase tablausuario");
     }
     PreparedStatement pst = conexion.getCon().prepareStatement("delete from usuario where codusuario = ?");
        pst.setString(1, cod.trim());
        pst.executeUpdate();

     }

    public List<Usuario> listarUsuarios() throws SQLException {
        List<Usuario> listUsuarios = new LinkedList<Usuario>();

        PreparedStatement ps = conexion.getCon().prepareStatement("SELECT * FROM usuario");
        ResultSet rs = ps.executeQuery();

        Usuario usu = null;
        while (rs.next()) {
            usu = load(rs);
            listUsuarios.add(usu);
        }

        return listUsuarios;
    }


}
